package com.lft.freshordering.service.impl;


import com.lft.freshordering.entity.Audit;
import com.lft.freshordering.mapper.AuditMapper;
import com.lft.freshordering.service.IAuditService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author tyhxzy
 * @since 2024-12-02
 */
@Service
/**
 * 实现审计服务接口，提供审计相关的业务逻辑处理
 */
public class AuditServiceImpl  implements IAuditService {

    // 注入审计数据访问对象，用于与数据库交互
    @Autowired
    private AuditMapper auditMapper;

    // 注入Redis模板对象，用于与Redis数据库交互，实现缓存功能
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    @Override
    public int addAudit(Audit audit) {
        return auditMapper.addAudit(audit);
    }

    @Override
    public Audit selectAudit(Integer id) {
        Audit audit = auditMapper.selectAudit(id);
        return audit;
    }

    @Override
    public int updateAudit(Audit audit) {
        int i = auditMapper.updateAudit(audit);
        return i;
    }

    @Override
    public Boolean logout() {
        return null;
    }

    @Override
    public Audit selectByUserId(Integer userId) {
        return auditMapper.selectByUserId(userId);
    }


    /**
     * 根据审计ID选择审计记录
     *
     * @param id 审计记录的唯一标识符
     * @return 返回查询到的Audit对象，如果未找到则返回null
     */
//    @Override
//    public Audit selectAudit(Integer id) {
//        Audit audit = auditMapper.selectAudit(id);
//        return audit;
//    }

    /**
     * 更新审计记录
     *
     * @param audit 需要更新的审计对象，包含更新后的信息
     * @return 返回更新操作的结果，1表示成功，其他值表示失败
     */
//    @Override
//    public int updateAudit(Audit audit) {
//        return auditMapper.updateAudit(audit);
//    }

    /**
     * 执行用户注销操作
     * 本方法通过删除Redis中的用户相关缓存来实现用户注销的功能
     *
     * @return 总是返回true，表示注销操作执行完毕，不保证操作成功
     */
//    @Override
//    public Boolean logout() {
//        // 从ThreadLocal中获取当前用户信息
//        Object o = ThreadLocalUtil.get();
//        Audit o1 = (Audit) o;
//
//        // 从Redis中获取用户相关的缓存信息，并删除
//        Object o2 = redisTemplate.opsForValue().get(o1.getUserName());
//        redisTemplate.delete(o2.toString());
//        redisTemplate.delete(o1.getUserName());
//
//        // 返回true，表示注销操作执行完毕
//        return true;
//    }

//-------------------------------------------------------------------------------------------------------


    @Override
    public List<Audit> selAll() {
        return auditMapper.selAll();
    }




//    @Override
//    public Integer submitAudit(Audit audit) {
//        User user = ThreadLocalUtil.get();
//        audit.setUserId(user.getId());
//        // 检查审核对象的用户ID是否为空
//        if (user.getId() != null && user.getId() != 0) {
//            // 创建查询包装器，用于根据用户ID查询现有的审核信息
//            QueryWrapper<Audit> queryWrapper = new QueryWrapper<>();
//            queryWrapper.eq("user_id", user.getId());
//            // 根据用户ID查询现有的审核信息
//            Audit oldAudit = auditMapper.selectOne(queryWrapper);
//
//            // 如果没有找到现有的审核信息，则插入新的审核信息
//            if (oldAudit == null) {
//                audit.setReviewStatus(3); // 设置审核状态为待审核
//                return auditMapper.insert(audit);
//            } else {
//                // 如果已经存在审核信息，则查审核状态
//                if (oldAudit.getReviewStatus() == 3) {
//                    // 如果审核状态已为待审核，则直接返回0
//                    return 0;
//                } else {
//                    //创建更新，用来更新审核信息
//                    UpdateWrapper<Audit> updateWrapper = new UpdateWrapper<>();
//                    updateWrapper.eq("user_id", user.getId());
//                    // 更新审核的各项信息
//                    updateWrapper.set("address", audit.getAddress());
//                    updateWrapper.set("phone", audit.getPhone());
//                    updateWrapper.set("user_name", audit.getUserName());
//                    // 设置审核状态为待审核
//                    updateWrapper.set("review_status", 3);
//                    // 更新审核信息并返回结果
//                    return auditMapper.update(audit, updateWrapper);
//                }
//            }
//        }
//        // 如果用户ID为空，则不进行任何操作，返回0
//        return null;
//    }

    @Override
    public Audit getById(Integer userId) {
        return null;
    }

    @Override
    public boolean updateById(Audit audit) {
        return false;
    }

    @Override
    public Integer updateaudit(Integer auditId) {
        Integer i = auditMapper.updateAuditStatus(auditId);
        return i;
    }

//    @Override
//    public void updateAuditStatus(Integer reviewStatus, Integer auditId) {
//        auditMapper.updateAuditStatus(reviewStatus, auditId);
//    }

    @Override
    public Audit selectAuditIdByName(String shopName) {
        return auditMapper.selectAuditIdByName(shopName);
    }

    @Override
    public Integer updateAuditStatusToReject(Integer id, Integer reviewStatus, String cause) {
        return auditMapper.updateAuditStatusToReject(id, reviewStatus, cause);
    }

    @Override
    public List<Map> getAuditList() {
        List<Map> auditList = auditMapper.selectauditdd();
        return auditList;
    }

    @Override
    public int updateAuditStatus(Integer id) {
        int i = auditMapper.updateAuditStatusByUserId(id);
        return i;
    }

    @Override
    public int updateAuditStatusToReject(Integer id) {
        int i = auditMapper.updateAuditStatusByUserId2(id);
        return i;
    }

    @Override
    public Map selectauditdd2(Integer id) {
        Map map = auditMapper.selectauditdd2(id);
        return map;
    }


}

